using System;
using System.Collections.Generic;
using System.Text;

namespace ITCrossing
{
	public struct Item
	{
		public DateTime DateCreated;
		public DateTime StartDate;
		public string ModuleTitle;
		public string Content;
		/// <summary>
		/// Maps to the supportsExtendedEntries manifest file entry.
		/// </summary>
		public string ExtendedContent;
		public string Title;
		public string[] Categories;
		public string Keywords;         
		public int AllowComments;		
		public int AllowTrackbacksOrPings;
		//public Enclosure enclosure;     // Not currently used
		public string Link;
		public string Permalink;
		public object ItemId;
		/// <summary>
		/// Used to track an SEO friendly description of the post, usually shorter than
		/// the Title and formatted for SEO presentation (eg. Using-Trackbacks-1).
		/// Only utilized if the supportsSlug entity is set to yes in the manifest file.
		/// </summary>
		public string SeoFriendlyTitle;
		/// <summary>
		/// Only utilized if the supportsPassword entity is set to yes in the manifest file.
		/// </summary>
		public string ItemPassword;
		/// <summary>
		/// Only utilized if the supportsPageParent entity is set to yes in the manifest file.
		/// </summary>
		public string ParentId;
		/// <summary>
		/// Only utilized if the supportsPageOrder entity is set to yes in the manifest file.
		/// </summary>
		public string PageOrder;
		/// <summary>
		/// Only utilized if the supportsAuthor entity is set to yes in the manifest file.
		/// </summary>
		public string AuthorId;
		/// <summary>
		/// Only utilized if the supportsExcerpt entity is set to yes in the manifest file.
		/// </summary>
		public string Summary;
		/// <summary>
		/// Used to manage trackback URLs.  Will only be populated if 
		/// supportsTrackbacks is set to yes in the manifest file.
		/// </summary>
		public string[] PingUrls;

		/// <summary>
		/// Publish denotes whether the post should be published or saved as a draft.
		/// </summary>
		public bool Publish;
		/// <summary>
		/// ItemType differentiates between posts and pages, a concept available in Windows Live Writer
		/// </summary>
		public ItemType ItemType;
		/// <summary>
		/// StyleDetectionPost specifies whether this item was created as a part of the process
		/// of detecting site styles (currently only a process initiated by Windows Live Writer).
		/// </summary>
		public bool StyleDetectionPost;
		/// <summary>
		/// StyleId is a custom id passed in during account creation in Windows Live Writer or other
		/// offline publishing clients that can be used by the module to help with the process of 
		/// downloading site styles (currently only availalbe in Windows Live Writer).
		/// </summary>
		public string StyleId;
	}

	/// <summary>
	/// The concept of the module here is fluid and may not represent the actual
	/// module for the implementation of your provider.  For example, with the Blog
	/// module, the moduleLevelId is actually set to the blogId.  The purpose of this
	/// struct is to track units where items are aggregated.  If your module doesn't 
	/// have an object like this, then just return information related to modules 
	/// to which the currently logged on user would have access to either insert,
	/// update or delete items.
	/// </summary>
	public struct ModuleInfoStruct
	{
		public string ModuleLevelId;
		public int DnnModuleId;
		public string Url;
		public string ModuleName;
	}

	public struct ItemCategoryInfo
	{
		public int CategoryId;
		public int ParentId;
		public string Description;
		public string CategoryName;
		public string HtmlUrl;
		public string RssUrl;
	}
	///// <summary>
	///// Used only if supportsHierarchicalCategories is set to 
	/////		Yes in the manifest file.
	///// </summary>
	//public struct HierarchicalCategoryInfo
	//{
	//    public int CategoryId;
	//    public int ParentId;
	//    public string Description;
	//    public string CategoryName;
	//    public string HtmlUrl;
	//    public string RssUrl;

	//}
	public struct ItemCategory
	{
		public string CategoryId;
		public string CategoryName;
		public bool IsPrimary;
	}

	public struct NewItemCategory
	{
		public string Name;
		public string Slug;
		public int ParentId;
		public string Description;
	}
	public struct ItemMediaObject
	{
		public string Name;
		public string Type;
		public Byte[] Bits;
	}
	public struct DnnModuleInfoStruct
	{
		public int TabModuleId;
		public int ModuleId;
		public int TabId;
		public string TabPath;
		public string ModuleTitle;
		public DateTime CreatedDate;
	}
	public struct TrackbackAndPingSettings
	{
		public bool AllowForPost;
		public bool AllowForPage;
		public bool AllowAutoDiscovery;
		public bool AllowOverrideByPingDropDown;
	}
	public struct ImageFileInfo
	{
		public string Extension;
		public long Size;
		public int Width;
		public int Height;
		public string ContentType;
	}
	public struct ProviderStruct
	{
		public string ProviderKey;
		public string ProviderAssemblyName;
		public string ProviderTypeName;
		public string ManifestPath;
		public int DesktopModuleId;
	}
}
